﻿
#include "Interface.h"

using namespace std;

Interface::Interface()
{
	game = new jogo(); //Iniciar vazio, pq pode dar erro

	cor_fundo = consola.VERMELHO; //Cor de Fundo
	cor_texto = consola.BRANCO_CLARO; // Cor do Texto

	consola.setBackgroundColor(cor_fundo);
	consola.setTextColor(cor_texto);
}

Interface::~Interface()
{
}

void Interface::MenuPrincipal()
{
	Cabecalho();

	Consola c;
	jogo j;
	char tecla;
	string nome;
	int x=31, y=12;

	//Menu Principal
	c.gotoxy(30,12);
	cout << "[ ]--> Iniciar Jogo" << endl;
	c.gotoxy(30,14);
	cout << "[ ]--> Load do Ficheiro" << endl;
	c.gotoxy(30,16);
	cout << "[ ]--> Sair do jogo" << endl;

	//Posicao inicial do cursor
	c.gotoxy(x,y);
	cout << "X";


	while (1) {
		tecla = c.getch();
		if(tecla==c.ENTER) break;
		if ( (tecla != c.ESQUERDA) && (tecla != c.DIREITA) &&
			(tecla != c.CIMA)     && (tecla != c.BAIXO) ) continue;

		c.gotoxy(x,y);
		cout << ' ';

		if (tecla == c.CIMA && y!=12) y-=2;
		if (tecla == c.BAIXO && y!=16) y+=2;
		c.gotoxy(x,y);
		cout << 'X';
	}

	switch(y){
	case 12: // linha 12

		desenhoEcraJogo();

		break;
	case 14: //linha 14
		//c.clrscr();
		//Cabecalho();
		//c.gotoxy(5,10);
		//cout <<"Escreva o nome do ficheiro: ";
		//getline(cin,nome);

		//j.abre_ficheiro(nome);
		//c.gotoxy(5,12);
		//j.dados_jogo();

		cout <<"Dados carregados"<<endl;
		//abrir para jogar
		break;

	case 16: //linha 16
		c.clrscr();
		Cabecalho();
		desenhaEcraSaida();
		break;
	default:
		break;
	}
}

void Interface::desenhaEcraSaida()
{
	consola.setTextColor(consola.BRANCO_CLARO);

	int menuPosX = 25;
	int menuPosY = 8;

	consola.gotoxy(menuPosX, menuPosY);
	cout << "********************************"<<endl;
	consola.gotoxy(menuPosX, menuPosY+1);
	cout << "*           Autores            *";
	consola.gotoxy(menuPosX, menuPosY+2);
	cout << "*                              *";
	consola.gotoxy(menuPosX, menuPosY + 3);
	cout << "*       Milton Neves           *";
	consola.gotoxy(menuPosX, menuPosY+4);
	cout << "*                              *";
	consola.gotoxy(menuPosX, menuPosY+5);
	cout << "*                              *";
	consola.gotoxy(menuPosX, menuPosY + 6);
	cout << "*       Renato Aparicio        *"<<endl;
	consola.gotoxy(menuPosX, menuPosY+7);
	cout << "********************************"<<endl;

	consola.setBackgroundColor(consola.VERMELHO);
	consola.gotoxy(menuPosX, menuPosY + 10);
	cout << " >>>  ENTER para continuar  <<< "<<endl;
}

void Interface::desenhoEcraJogo(){
	Consola c;
	Comandos cmd;

	c.clrscr();
	Cabecalho();


	//Linha Vertical no jogo
	for(int i=7;i<50;i++){
		c.gotoxy(90,i);
		cout << (char) 186;
	}

	//Caracter ascii 203
	c.gotoxy(90,6);
	cout << (char) 203;

	// linha horizontal no jogo (Comandos)
	c.gotoxy(0,50);
	for(int i=0;i<120;i++){ 
		cout << (char) 205;
	}

	//Caracter ascii 202
	c.gotoxy(90,50);
	cout << (char) 202;

	//Ver melhor o ciclo de entrar e sair dos COMANDOS
	c.gotoxy(0,52);
	cout << "Comandos: ";
	char tecla;
	while (1) {
		tecla = c.getch();
		if(game->verifica_mundo()==true){//verifica se o mundo ja foi criado
			if  (tecla == c.ESQUERDA){
				desenhoMapa(c.ESQUERDA);
			}
			if(tecla==c.DIREITA){
				desenhoMapa(c.DIREITA);
			}
			if(tecla==c.CIMA){
				desenhoMapa(c.CIMA);
			}
			if(tecla==c.BAIXO){
				desenhoMapa(c.BAIXO);
			}
		}
		if(tecla=='c'){ 
			string comando;
			getline(cin,comando);
			cmd.separa_comandos(comando,game);

			if(game->verifica_mundo()==true) //verifica se o mundo ja foi criado
				desenhoMapa(0);

		}
		if(tecla=='x')
			break;

	}

}

void Interface::MostraNumLin(int pos){
	int y=0, i=pos;
	Consola c;
	c.setBackgroundColor(c.VERMELHO);

	for(int y=11;y<47;y+=3){
		c.gotoxy(6,y);
		if(i==100)
			cout<<i;
		else if(i>=0 && i<=9)
			cout<< "0" << "0" <<i;
		else
			cout<<"0"<<i;
		i++;
	}
}


void Interface::MostraNumCol(int pos){
	int x=0, i=pos;
	Consola c;
	c.setBackgroundColor(c.VERMELHO);

	for(int x=10;x<79;x+=3){
		if(x%2==0)
			c.gotoxy(x,8);
		else
			c.gotoxy(x,9);

		if(i==100)
			cout<<i;
		else if(i>=0 && i<=9)
			cout<< "0" << "0" <<i;
		else
			cout<<"0"<<i;
		i++;
	}
}

void Interface::desenhoMapa(int tecla){

	int linha,coluna,x=10,y=10;
	Consola c;

	c.gotoxy(x,y);

	if(tecla==c.CIMA && game->getlin_inicio()>0){
		game->setlin_inicio(game->getlin_inicio()-1);
	}
	if(tecla==c.BAIXO && game->getlin_inicio()<game->getdim_linha()-12){
		game->setlin_inicio(game->getlin_inicio()+1);
	}
	if(tecla==c.DIREITA && game->getcol_inicio()<game->getdim_coluna()-23){
		game->setcol_inicio(game->getcol_inicio()+1);
	}
	if(tecla==c.ESQUERDA && game->getcol_inicio()>0){
		game->setcol_inicio(game->getcol_inicio()-1);
	}

	for(int z=0;z<23;z++){ //coluna
		for(int k=0;k<12;k++){ //Linhas
			c.setBackgroundColor(game->get_celula_cor(z+k+game->getlin_inicio()+game->getcol_inicio()));
			for(int i=0;i<3;i++){ //Imprimir cada linha
				if(i==0){
					cout << game->get_celula_linha_1(z+k+game->getlin_inicio()+game->getcol_inicio()); 
				}
				else if(i==1)
					cout << game->get_celula_linha_2(z+k+game->getlin_inicio()+game->getcol_inicio());
				else
					cout << game->get_celula_linha_1(z+k+game->getlin_inicio()+game->getcol_inicio());

				consola.gotoxy(x,++y);
			}

		}
		y=10;
		x+=3;
		consola.gotoxy(x,y);

	}
	
	MostraNumLin(game->getlin_inicio());
	MostraNumCol(game->getcol_inicio());

	c.gotoxy(10,52);
}

void Interface::Cabecalho()
{
	// Limpar ecrã
	consola.clrscr(); 

	consola.gotoxy(0,1);
	// linha horizontal
	for(int i=0;i<120;i++){ 
		cout << (char) 205;
	}

	consola.gotoxy(30,2);
	cout << "                    __       ___    ____     ___        __       ____   ______"<< endl;
	consola.gotoxy(30,3);
	cout << "\\\\    //\\\\    //   //\\\\    ||___|| ||      ||___||     //\\\\     ||        ||   "<< endl;
	consola.gotoxy(30,4);
	cout << " \\\\  //  \\\\  //   //__\\\\   || \\\\   ||      || \\\\      //__\\\\    ||---     ||" <<endl;
	consola.gotoxy(30,5);
	cout << "  \\\\//    \\\\//   //    \\\\  ||  \\\\  ||___   ||  \\\\    //    \\\\   ||        ||" <<endl;

	// linha horizontal
	for(int i=0;i<120;i++){ 
		cout << (char) 205;
	}
}

